package br.com.dallasmotopecas.principal.managerbean;

import java.io.Serializable;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import br.com.dallasmotopecas.seguranca.usuario.controller.UsuarioController;
import br.com.dallasmotopecas.seguranca.usuario.vo.UsuarioVo;
import br.com.dallasmotopecas.util.exception.AlterarObjetoException;
import br.com.dallasmotopecas.util.exception.CampoObrigatorioException;
import br.com.dallasmotopecas.util.exception.ClasseNaoEncontradaException;
import br.com.dallasmotopecas.util.exception.ConexaoException;
import br.com.dallasmotopecas.util.exception.ConsultarObjetoException;
import br.com.dallasmotopecas.util.exception.DirecionamentoPaginaException;
import br.com.dallasmotopecas.util.exception.InserirObjetoException;
import br.com.dallasmotopecas.util.exception.RegistroExistenteException;
import br.com.dallasmotopecas.util.managerbean.AbstractManagerBean;

@ManagedBean(name="principalManagerBean")
@ViewScoped
public class PrincipalManagerBean extends AbstractManagerBean implements Serializable
{
	private static final long serialVersionUID = 1L;
	private static final int REQUISICAO_MODULO_VENDAS = 1;
	private static final int REQUISICAO_MODULO_COMPRAS = 2;
	private static final int REQUISICAO_MODULO_TRANSPORTADORA = 3;
	private static final int REQUISICAO_MODULO_CONHECIMENTO = 4;
	private static final int REQUISICAO_MODULO_SEGURANCA = 5;
	private static final int SAIR = 20;
	private static final int REQUISICAO_ALTERAR_SENHA = 21;
	private UsuarioVo usuarioVo;
	
	public PrincipalManagerBean()
	{
		
	}

	@PostConstruct
	public void inicializar()
	{
		try
		{
			if (!isUsuarioLogado())
			{
				redirecionarPagina("/Index.jsf");
				return;
			}
			processaPermissaoUsuario(getUsuarioLogado());
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	@PreDestroy
	public void destroy()
	{
		setUsuarioVo(null);
	}
	
	public UsuarioVo getUsuarioVo()
	{
		if (usuarioVo == null) usuarioVo = new UsuarioVo();
		
		return usuarioVo;
	}

	public void setUsuarioVo(UsuarioVo usuarioVo)
	{
		this.usuarioVo = usuarioVo;
	}

	public void requisicaoPrincipal(int requisicao)
	{
		try
		{
			switch (requisicao)
			{
				case REQUISICAO_MODULO_VENDAS:
				{
					redirecionarPagina("/view/venda/Home.jsf");
					break;
				}
				case REQUISICAO_MODULO_COMPRAS:
				{
					redirecionarPagina("/view/compra/Home.jsf");
					break;
				}
				case REQUISICAO_MODULO_TRANSPORTADORA:
				{
					redirecionarPagina("/view/transportadora/Home.jsf");
					break;
				}
				case REQUISICAO_MODULO_CONHECIMENTO:
				{
					redirecionarPagina("/view/conhecimento/Home.jsf");
					break;
				}
				case REQUISICAO_MODULO_SEGURANCA:
				{
					redirecionarPagina("/view/seguranca/Home.jsf");
					break;
				}
				case REQUISICAO_ALTERAR_SENHA:
				{
					carregarTelaAlterarSenha();
					break;
				}
				case SAIR:
				{
					removerSessaoUsuario();
					redirecionarPagina("/Index.jsf");
					break;
				}
				default:
				{
					redirecionarPagina("/Index.jsf");
					break;
				}
			}
		}
		catch(DirecionamentoPaginaException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
	}
	
	private void carregarTelaAlterarSenha()
	{
		getUsuarioVo().setId(getUsuarioLogado().getId());
		getUsuarioVo().setLogin(getUsuarioLogado().getLogin());
		abrirModal("alterarSenhaDialog");
	}
	
	public void gravarUsuario()
	{
		UsuarioController usuarioController = null;
		try
		{
			usuarioController = new UsuarioController(getContexto());
			usuarioController.alterarSenhaUsuario(getUsuarioVo());
			fecharModal("alterarSenhaDialog");
		}
		catch (ClasseNaoEncontradaException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConexaoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (RegistroExistenteException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (AlterarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (ConsultarObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (InserirObjetoException e)
		{
			e.printStackTrace();
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		catch (CampoObrigatorioException e)
		{
			processarMensagem(MENSAGEM_FATAL, e.getMessage());
		}
		finally
		{
			if (usuarioController != null)
			{
				usuarioController.close();
				usuarioController = null;
			}
		}
	}
}
